patch from: http://www.linuxfromscratch.org/blfs/view/svn/multimedia/opal.html

Submitted By:            Igor Živković <contact@igor-zivkovic.from.hr>
Date:                    2013-10-08
Initial Package Version: 3.10.10
Upstream Status:         Unknown
Origin:                  Gentoo
Description:             Fixes building against FFmpeg version >= 2.0.0

diff -Naur opal-3.10.10.orig/plugins/video/common/dyna.cxx opal-3.10.10/plugins/video/common/dyna.cxx
--- opal-3.10.10.orig/plugins/video/common/dyna.cxx	2013-02-20 03:18:05.000000000 +0100
+++ plugins/video/common/dyna.cxx	2013-10-08 12:57:25.058873513 +0200
@@ -210,7 +210,7 @@
 #endif
 
 
-FFMPEGLibrary::FFMPEGLibrary(CodecID codec)
+FFMPEGLibrary::FFMPEGLibrary(AVCodecID codec)
 {
   m_codec = codec;
   if (m_codec==CODEC_ID_H264)
@@ -348,12 +348,12 @@
   return true;
 }
 
-AVCodec *FFMPEGLibrary::AvcodecFindEncoder(enum CodecID id)
+AVCodec *FFMPEGLibrary::AvcodecFindEncoder(enum AVCodecID id)
 {
   return Favcodec_find_encoder(id);
 }
 
-AVCodec *FFMPEGLibrary::AvcodecFindDecoder(enum CodecID id)
+AVCodec *FFMPEGLibrary::AvcodecFindDecoder(enum AVCodecID id)
 {
   WaitAndSignal m(processLock);
 
diff -Naur opal-3.10.10.orig/plugins/video/common/dyna.h opal-3.10.10/plugins/video/common/dyna.h
--- opal-3.10.10.orig/plugins/video/common/dyna.h	2013-02-20 03:18:05.000000000 +0100
+++ plugins/video/common/dyna.h	2013-10-08 12:57:25.058873513 +0200
@@ -88,13 +88,13 @@
 class FFMPEGLibrary 
 {
   public:
-    FFMPEGLibrary(CodecID codec);
+    FFMPEGLibrary(AVCodecID codec);
     ~FFMPEGLibrary();
 
     bool Load();
 
-    AVCodec *AvcodecFindEncoder(enum CodecID id);
-    AVCodec *AvcodecFindDecoder(enum CodecID id);
+    AVCodec *AvcodecFindEncoder(enum AVCodecID id);
+    AVCodec *AvcodecFindDecoder(enum AVCodecID id);
     AVCodecContext *AvcodecAllocContext(void);
     AVFrame *AvcodecAllocFrame(void);
     int AvcodecOpen(AVCodecContext *ctx, AVCodec *codec);
@@ -117,15 +117,15 @@
     DynaLink m_libAvcodec;
     DynaLink m_libAvutil;
 
-    CodecID m_codec;
+    AVCodecID m_codec;
     char m_codecString[32];
 
     void (*Favcodec_init)(void);
     void (*Fav_init_packet)(AVPacket *pkt);
 
     void (*Favcodec_register_all)(void);
-    AVCodec *(*Favcodec_find_encoder)(enum CodecID id);
-    AVCodec *(*Favcodec_find_decoder)(enum CodecID id);
+    AVCodec *(*Favcodec_find_encoder)(enum AVCodecID id);
+    AVCodec *(*Favcodec_find_decoder)(enum AVCodecID id);
     AVCodecContext *(*Favcodec_alloc_context)(void);
     AVFrame *(*Favcodec_alloc_frame)(void);
     int (*Favcodec_open)(AVCodecContext *ctx, AVCodec *codec);
diff -Naur opal-3.10.10.orig/plugins/video/common/ffmpeg/libavcodec/avcodec.h opal-3.10.10/plugins/video/common/ffmpeg/libavcodec/avcodec.h
--- opal-3.10.10.orig/plugins/video/common/ffmpeg/libavcodec/avcodec.h	2013-02-20 03:18:04.000000000 +0100
+++ plugins/video/common/ffmpeg/libavcodec/avcodec.h	2013-10-08 12:57:25.060873488 +0200
@@ -101,7 +101,7 @@
  * 1. no value of a existing codec ID changes (that would break ABI),
  * 2. it is as close as possible to similar codecs.
  */
-enum CodecID {
+enum AVCodecID {
     CODEC_ID_NONE,
 
     /* video codecs */
@@ -1390,7 +1390,7 @@
 
     char codec_name[32];
     enum AVMediaType codec_type; /* see AVMEDIA_TYPE_xxx */
-    enum CodecID codec_id; /* see CODEC_ID_xxx */
+    enum AVCodecID codec_id; /* see CODEC_ID_xxx */
 
     /**
      * fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
@@ -2843,7 +2843,7 @@
      */
     const char *name;
     enum AVMediaType type;
-    enum CodecID id;
+    enum AVCodecID id;
     int priv_data_size;
     int (*init)(AVCodecContext *);
     int (*encode)(AVCodecContext *, uint8_t *buf, int buf_size, void *data);
@@ -2898,7 +2898,7 @@
      *
      * See CODEC_ID_xxx
      */
-    enum CodecID id;
+    enum AVCodecID id;
 
     /**
      * Supported pixel format.
@@ -3402,10 +3402,10 @@
 /**
  * Find a registered encoder with a matching codec ID.
  *
- * @param id CodecID of the requested encoder
+ * @param id AVCodecID of the requested encoder
  * @return An encoder if one was found, NULL otherwise.
  */
-AVCodec *avcodec_find_encoder(enum CodecID id);
+AVCodec *avcodec_find_encoder(enum AVCodecID id);
 
 /**
  * Find a registered encoder with the specified name.
@@ -3418,10 +3418,10 @@
 /**
  * Find a registered decoder with a matching codec ID.
  *
- * @param id CodecID of the requested decoder
+ * @param id AVCodecID of the requested decoder
  * @return A decoder if one was found, NULL otherwise.
  */
-AVCodec *avcodec_find_decoder(enum CodecID id);
+AVCodec *avcodec_find_decoder(enum AVCodecID id);
 
 /**
  * Find a registered decoder with the specified name.
@@ -3822,7 +3822,7 @@
  * @param[in] codec_id the codec
  * @return Number of bits per sample or zero if unknown for the given codec.
  */
-int av_get_bits_per_sample(enum CodecID codec_id);
+int av_get_bits_per_sample(enum AVCodecID codec_id);
 
 #if FF_API_OLD_SAMPLE_FMT
 /**
diff -Naur opal-3.10.10.orig/plugins/video/H.263-1998/h263-1998.cxx opal-3.10.10/plugins/video/H.263-1998/h263-1998.cxx
--- opal-3.10.10.orig/plugins/video/H.263-1998/h263-1998.cxx	2013-02-20 03:18:03.000000000 +0100
+++ plugins/video/H.263-1998/h263-1998.cxx	2013-10-08 12:57:25.061873475 +0200
@@ -48,6 +48,10 @@
 #endif
 
 #include "h263-1998.h"
+extern "C"
+{
+#include <libavutil/opt.h>
+}
 #include <limits>
 #include <iomanip>
 #include <stdio.h>
@@ -203,7 +207,7 @@
   PTRACE(4, m_prefix, "Encoder closed");
 }
 
-bool H263_Base_EncoderContext::Init(CodecID codecId)
+bool H263_Base_EncoderContext::Init(AVCodecID codecId)
 {
   PTRACE(5, m_prefix, "Opening encoder");
 
@@ -317,9 +321,9 @@
     // Level 2+ 
     // works with eyeBeam, signaled via  non-standard "D"
     if (atoi(value) == 1)
-      m_context->flags |= CODEC_FLAG_H263P_UMV; 
+      av_opt_set_int(m_context->priv_data, "umv", 1, 0);
     else
-      m_context->flags &= ~CODEC_FLAG_H263P_UMV; 
+      av_opt_set_int(m_context->priv_data, "umv", 0, 0);
     return;
   }
 
@@ -328,9 +332,9 @@
     // Annex F: Advanced Prediction Mode
     // does not work with eyeBeam
     if (atoi(value) == 1)
-      m_context->flags |= CODEC_FLAG_OBMC; 
+      av_opt_set_int(m_context->priv_data, "obmc", 1, 0);
     else
-      m_context->flags &= ~CODEC_FLAG_OBMC; 
+      av_opt_set_int(m_context->priv_data, "obmc", 0, 0);
     return;
   }
 #endif
@@ -360,9 +364,9 @@
     // Annex K: Slice Structure
     // does not work with eyeBeam
     if (atoi(value) != 0)
-      m_context->flags |= CODEC_FLAG_H263P_SLICE_STRUCT; 
+      av_opt_set_int(m_context->priv_data, "structured_slices", 1, 0);
     else
-      m_context->flags &= ~CODEC_FLAG_H263P_SLICE_STRUCT; 
+      av_opt_set_int(m_context->priv_data, "structured_slices", 0, 0);
     return;
   }
 
@@ -370,9 +374,9 @@
     // Annex S: Alternative INTER VLC mode
     // does not work with eyeBeam
     if (atoi(value) == 1)
-      m_context->flags |= CODEC_FLAG_H263P_AIV; 
+      av_opt_set_int(m_context->priv_data, "aiv", 1, 0);
     else
-      m_context->flags &= ~CODEC_FLAG_H263P_AIV; 
+      av_opt_set_int(m_context->priv_data, "aiv", 0, 0);
     return;
   }
 
@@ -450,15 +454,6 @@
   PTRACE(5, m_prefix, "qmax set to " << m_context->qmax);
   PTRACE(5, m_prefix, "payload size set to " << m_context->rtp_payload_size);
 
-  #define CODEC_TRACER_FLAG(tracer, flag) \
-    PTRACE(4, m_prefix, #flag " is " << ((m_context->flags & flag) ? "enabled" : "disabled"));
-  CODEC_TRACER_FLAG(tracer, CODEC_FLAG_H263P_UMV);
-  CODEC_TRACER_FLAG(tracer, CODEC_FLAG_OBMC);
-  CODEC_TRACER_FLAG(tracer, CODEC_FLAG_AC_PRED);
-  CODEC_TRACER_FLAG(tracer, CODEC_FLAG_H263P_SLICE_STRUCT)
-  CODEC_TRACER_FLAG(tracer, CODEC_FLAG_LOOP_FILTER);
-  CODEC_TRACER_FLAG(tracer, CODEC_FLAG_H263P_AIV);
-
   return FFMPEGLibraryInstance.AvcodecOpen(m_context, m_codec) == 0;
 }
 
@@ -521,7 +516,7 @@
 
     // Need to copy to local buffer to guarantee 16 byte alignment
     memcpy(m_inputFrame->data[0], OPAL_VIDEO_FRAME_DATA_PTR(header), header->width*header->height*3/2);
-    m_inputFrame->pict_type = (flags & PluginCodec_CoderForceIFrame) ? FF_I_TYPE : AV_PICTURE_TYPE_NONE;
+    m_inputFrame->pict_type = (flags & PluginCodec_CoderForceIFrame) ? AV_PICTURE_TYPE_I : AV_PICTURE_TYPE_NONE;
 
     /*
     m_inputFrame->pts = (int64_t)srcRTP.GetTimestamp()*m_context->time_base.den/m_context->time_base.num/VIDEO_CLOCKRATE;
@@ -603,13 +598,13 @@
   m_context->rtp_callback = &H263_RFC2190_EncoderContext::RTPCallBack;
   m_context->opaque = this; // used to separate out packets from different encode threads
 
-  m_context->flags &= ~CODEC_FLAG_H263P_UMV;
+  av_opt_set_int(m_context->priv_data, "umv", 0, 0);
   m_context->flags &= ~CODEC_FLAG_4MV;
 #if LIBAVCODEC_RTP_MODE
   m_context->flags &= ~CODEC_FLAG_H263P_AIC;
 #endif
-  m_context->flags &= ~CODEC_FLAG_H263P_AIV;
-  m_context->flags &= ~CODEC_FLAG_H263P_SLICE_STRUCT;
+  av_opt_set_int(m_context->priv_data, "aiv", 0, 0);
+  av_opt_set_int(m_context->priv_data, "structured_slices", 0, 0);
 
   return true;
 }
diff -Naur opal-3.10.10.orig/plugins/video/H.263-1998/h263-1998.h opal-3.10.10/plugins/video/H.263-1998/h263-1998.h
--- opal-3.10.10.orig/plugins/video/H.263-1998/h263-1998.h	2013-02-20 03:18:03.000000000 +0100
+++ plugins/video/H.263-1998/h263-1998.h	2013-10-08 12:57:25.062873463 +0200
@@ -115,7 +115,7 @@
     virtual ~H263_Base_EncoderContext();
 
     virtual bool Init() = 0;
-    virtual bool Init(CodecID codecId);
+    virtual bool Init(AVCodecID codecId);
 
     virtual bool SetOptions(const char * const * options);
     virtual void SetOption(const char * option, const char * value);
diff -Naur opal-3.10.10.orig/plugins/video/H.263-1998/Makefile.in opal-3.10.10/plugins/video/H.263-1998/Makefile.in
--- opal-3.10.10.orig/plugins/video/H.263-1998/Makefile.in	2013-02-20 03:18:03.000000000 +0100
+++ plugins/video/H.263-1998/Makefile.in	2013-10-08 12:57:25.062873463 +0200
@@ -35,7 +35,7 @@
              $(COMMONDIR)/dyna.cxx
 
 CFLAGS += @LIBAVCODEC_CFLAGS@ -I$(COMMONDIR)
-LIBS   += @DL_LIBS@
+LIBS   += @DL_LIBS@ @LIBAVUTIL_LIBS@
 
 HAVE_LIBAVCODEC_RTP_MODE=@HAVE_LIBAVCODEC_RTP_MODE@
 ifeq ($(HAVE_LIBAVCODEC_RTP_MODE),yes)
diff -Naur opal-3.10.10.orig/plugins/video/H.264/gpl/h264_helper.cxx opal-3.10.10/plugins/video/H.264/gpl/h264_helper.cxx
--- opal-3.10.10.orig/plugins/video/H.264/gpl/h264_helper.cxx	2013-02-20 03:18:02.000000000 +0100
+++ plugins/video/H.264/gpl/h264_helper.cxx	2013-10-08 12:57:25.062873463 +0200
@@ -27,6 +27,7 @@
 #include <fstream>
 #include <stdlib.h> 
 #include <sys/stat.h>
+#include <unistd.h>
 
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
diff -Naur opal-3.10.10.orig/plugins/video/H.264/h264-x264.cxx opal-3.10.10/plugins/video/H.264/h264-x264.cxx
--- opal-3.10.10.orig/plugins/video/H.264/h264-x264.cxx	2013-02-20 03:18:02.000000000 +0100
+++ plugins/video/H.264/h264-x264.cxx	2013-10-08 12:57:25.063873450 +0200
@@ -40,6 +40,9 @@
 #include "plugin-config.h"
 #endif
 
+#define FF_IDCT_H264 11
+#define CODEC_FLAG2_SKIP_RD 0x00004000
+
 #include <codec/opalplugin.hpp>
 
 #include "../common/ffmpeg.h"
@@ -1071,13 +1074,10 @@
         return false;
 
       m_context->workaround_bugs = FF_BUG_AUTODETECT;
-      m_context->error_recognition = FF_ER_AGGRESSIVE;
       m_context->idct_algo = FF_IDCT_H264;
       m_context->error_concealment = FF_EC_GUESS_MVS | FF_EC_DEBLOCK;
       m_context->flags = CODEC_FLAG_INPUT_PRESERVED | CODEC_FLAG_EMU_EDGE;
-      m_context->flags2 = CODEC_FLAG2_BRDO |
-                          CODEC_FLAG2_MEMC_ONLY |
-                          CODEC_FLAG2_DROP_FRAME_TIMECODE |
+      m_context->flags2 = CODEC_FLAG2_DROP_FRAME_TIMECODE |
                           CODEC_FLAG2_SKIP_RD |
                           CODEC_FLAG2_CHUNKS;
 
diff -Naur opal-3.10.10.orig/plugins/video/H.264/shared/x264wrap.cxx opal-3.10.10/plugins/video/H.264/shared/x264wrap.cxx
--- opal-3.10.10.orig/plugins/video/H.264/shared/x264wrap.cxx	2013-02-20 03:18:02.000000000 +0100
+++ plugins/video/H.264/shared/x264wrap.cxx	2013-10-08 12:57:25.064873438 +0200
@@ -33,6 +33,7 @@
 
 #include <codec/opalplugin.hpp>
 #include <stdio.h>
+#include <unistd.h>
 
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
diff -Naur opal-3.10.10.orig/plugins/video/MPEG4-ffmpeg/Makefile.in opal-3.10.10/plugins/video/MPEG4-ffmpeg/Makefile.in
--- opal-3.10.10.orig/plugins/video/MPEG4-ffmpeg/Makefile.in	2013-02-20 03:18:07.000000000 +0100
+++ plugins/video/MPEG4-ffmpeg/Makefile.in	2013-10-08 12:57:25.064873438 +0200
@@ -31,7 +31,7 @@
 SRCS      := mpeg4.cxx $(COMMONDIR)/dyna.cxx
 
 CFLAGS += @LIBAVCODEC_CFLAGS@ -I$(COMMONDIR)
-LIBS   += @DL_LIBS@
+LIBS   += @DL_LIBS@ @LIBAVUTIL_LIBS@
 
 # Add LIBAVCODEC_SOURCE_DIR to the include path so we can #include <libavcodec/...h>
 # Also add libavutil, so ffmpeg headers can #include "log.h".
diff -Naur opal-3.10.10.orig/plugins/video/MPEG4-ffmpeg/mpeg4.cxx opal-3.10.10/plugins/video/MPEG4-ffmpeg/mpeg4.cxx
--- opal-3.10.10.orig/plugins/video/MPEG4-ffmpeg/mpeg4.cxx	2013-02-20 03:18:07.000000000 +0100
+++ plugins/video/MPEG4-ffmpeg/mpeg4.cxx	2013-10-08 12:57:25.065873425 +0200
@@ -103,6 +103,7 @@
 
 #else /* LIBAVCODEC_HAVE_SOURCE_DIR */
 #include "../common/ffmpeg.h"
+#include <libavutil/opt.h>
 #endif /* LIBAVCODEC_HAVE_SOURCE_DIR */
 }
 
@@ -589,17 +590,17 @@
     m_avpicture->quality = m_videoQMin;
 
 #ifdef USE_ORIG
-    m_avcontext->flags |= CODEC_FLAG_PART;   // data partitioning
+    av_opt_set_int(m_avcontext->priv_data, "data_partitionin", 1, 0);
     m_avcontext->flags |= CODEC_FLAG_4MV;    // 4 motion vectors
 #else
     m_avcontext->max_b_frames=0; /*don't use b frames*/
     m_avcontext->flags|=CODEC_FLAG_AC_PRED;
-    m_avcontext->flags|=CODEC_FLAG_H263P_UMV;
+    av_opt_set_int(m_avcontext->priv_data, "umv", 1, 0);
     /*c->flags|=CODEC_FLAG_QPEL;*/ /*don't enable this one: this forces profile_level to advanced simple profile */
     m_avcontext->flags|=CODEC_FLAG_4MV;
     m_avcontext->flags|=CODEC_FLAG_GMC;
     m_avcontext->flags|=CODEC_FLAG_LOOP_FILTER;
-    m_avcontext->flags|=CODEC_FLAG_H263P_SLICE_STRUCT;
+    av_opt_set_int(m_avcontext->priv_data, "structured_slices", 1, 0);
 #endif
     m_avcontext->opaque = this;              // for use in RTP callback
 }
@@ -804,7 +805,7 @@
         // Should the next frame be an I-Frame?
         if ((flags & PluginCodec_CoderForceIFrame) || (m_frameNum == 0))
         {
-            m_avpicture->pict_type = FF_I_TYPE;
+            m_avpicture->pict_type = AV_PICTURE_TYPE_I;
         }
         else // No IFrame requested, let avcodec decide what to do
         {
@@ -1325,7 +1326,7 @@
 
 void MPEG4DecoderContext::SetStaticDecodingParams() {
     m_avcontext->flags |= CODEC_FLAG_4MV; 
-    m_avcontext->flags |= CODEC_FLAG_PART;
+    av_opt_set_int(m_avcontext->priv_data, "data_partitionin", 1, 0);
     m_avcontext->workaround_bugs = 0; // no workaround for buggy implementations
 }
 
